package xyy.d3erpapi.utils;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import xyy.d3erpapi.pojo.d3po.InventoryUpdateRequest;

public class JsonUtils {

    private static final ObjectMapper objectMapper = new ObjectMapper();
    private static final Logger logger = LoggerFactory.getLogger(JsonUtils.class);

    /**
     * 将 JSON 字符串转换为指定类型的对象
     *
     * @param jsonRequest JSON 字符串
     * @param valueType   目标对象的 Class 类型
     * @param <T>        目标对象的类型
     * @return 转换后的对象
     */
    public static <T> T convertJsonToObject(String jsonRequest, Class<T> valueType) {
        try {
            return objectMapper.readValue(jsonRequest, valueType);
        } catch (JsonProcessingException e) {
            logger.error("无法转换 JSON 请求体: {}", jsonRequest, e);
            // 处理转换异常，例如记录日志或抛出自定义异常
            throw new RuntimeException("无法转换 JSON 请求体", e);
        }
    }

    // 将 JSON 字符串转换为 InventoryUpdateRequest 对象
    public static final InventoryUpdateRequest convertJsonToInventoryUpdateRequest(String jsonRequest) {
        try {
            return objectMapper.readValue(jsonRequest, InventoryUpdateRequest.class);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            // 处理转换异常，例如记录日志或抛出自定义异常
            throw new RuntimeException("无法转换 JSON 请求体", e);
        }
    }

    /**
     * 将对象转换为 JSON 字符串
     *
     * @param obj 需要转换的对象
     * @return JSON 字符串，如果转换失败则返回空字符串
     */
    public static String toJson(Object obj) {
        try {
            return objectMapper.writeValueAsString(obj);
        } catch (JsonProcessingException e) {
            // 记录错误日志
            System.err.println("对象转换为 JSON 失败: " + e.getMessage());
            return ""; // 返回空字符串以防止空指针异常
        }
    }
}
